Thank you all for your continued support of WINDOID and your many kind letters. Keep them coming. I'm sorry that it has been such a long time between WINDOID issues and I promise the next issue will be out on schedule. However, I hope that this issue will have been worth your extended wait. We're very pleased that you have enjoyed the efforts of our many friends and colleagues who contribute to these pages and actively encourage you to continue sending comments and suggestions to the HyperCard team. We love the mail, and you might just inspire us to include your most wanted feature in the next version.
Speaking of new versions, we would like to introduce you to HyperCard version 1.2.2. WINDOID #8 delineates HyperCard 1.2.2, the first world-wide release.
For all of you dedicated users that are not in the United States, we thank you for your patience. Many people have worked very long, hard hours here at Apple to give the world the power of Apple HyperCard. We know you'll love it!
"NOTE: Developers who plan to license and ship HyperCard with their products outside the United States should use version z1.2.2, which contains a special resource for handling non-U.S. date, currency, and other number formats. Contact Apple Software Licensing for details on distributing HyperCard with third-party products."
Inside WINDOID
In WINDOID #8 Phil Wyman, HyperCard tester, continues to support you with both his PowerTips column and a new Novice Corner for those of you, who in the words of an avid WINDOID reader, "wouldn╒t know a global variable from a dead fish!" Sioux Lacy shares with you Groupies 3.2, an update from her version 1.3 submitted in WINDOID #4. Bryan Carter, AHUG President, Paul Foraker of HyperPro in Cupertino, and other HyperTeam friends have submitted some very helpful stack design utilities. Additionally, Bryan wants to make you a member of AHUG and actively encourages you to form your own AHUG SIG. AHUG will generously assist you in various ways to make your stacks much more shareable and will continue to participate in getting your WINDOID delivered to your home or business address. Details for AHUG international membership will be announced at MacWorld San Francisco in January. For further information on AHUG meeting times and agenda. The number is: 408-974-1707. Finally, Mike Holm, HyperCard Product Manager, brings us the HyperCard version 1.2.2 Programmer╒s Notes for the definitive look.
Stack Design Guidelines
Not all stack designers start out equal. Some have an advantage. Professional stackware design has gotten considerably easier with HyperCard Stack Design Guidelines from Addison-Wesley. Written here at Apple Cupertino by Rachel Rutherford and staff, this book is as MacWeek reviews it, "one of the most useful HyperCard books we╒ve seen," and "This is a 'must have' book for serious HyperCard developers." I could not agree more. Great job Rachel et al!
HyperCard╒s First Birthday Party
The Apple HyperCard One Year Birthday Party, MacWorld Boston, Yahoo, What A Party!! Since I work in California, I can say that it was "Totally Awesome." Many East Coast friends who attended said the same. Apple culture at its best.
Cynthia Macon, Apple Public Relations, and Lynn Knerr, Macintosh Third-Party Marketing, among many other greats, threw a WingDing. The food was plentiful, the service excellent, the music rocked, and the people, oh the people, were incredible. Everyone that could attend was there, and we all shared one thing ╤ an unbridled love for HyperCard. 1500 happy, dancing people. We wish that all of you could have been there.
1) If you are using Finder and not MultiFinder, there is a nice option you should know about. If you are in HyperCard, and you open an application, i.e., Microsoft Word, when you quit the open application, you return to HyperCard. However, if you want to go directly to the Finder and not back to HyperCard, hold down the Option key while quitting the application.
2) You can bring an object all the way to the top by using Shift-Command-Plus or send it all the way to the bottom with Shift-Command-Minus. Be very careful when using Command-Plus to bring a button or a field one object closer. If you hit Command Backspace (or Command Delete), which is right next to the Plus key, you will delete the card (if it╒s unprotected).
3) Scripts are not saved until you click OK in the script editor. Be sure to do this often, even if you╒re not finished working on your script. One problem I had was working for a long time fine-tuning a script and accidentally hitting Cancel instead of OK. You lose all your changes that way. Additionally, it╒s really smart to periodically save a copy of your stack as a backup.
4) Sometimes your "if then else╒s" don╒t indent properly and it╒s very difficult to understand why. Here╒s a couple of possible debug tips. 1) Look for an "exit <handlerName>", where handlerName is not the current handler. 2) Indent problems can also happen if you just say "if" and forget to say "then". For example, the following will not indent:
if x=0
put x into z
end if
5) If you click in the space beneath the last text entered in a field, you will get extra returns in the field down to the point where you clicked. If you don╒t want those extra returns, Shift-Clicking anywhere beneath the last of the text in a field puts the cursor directly after the last character of the field without putting in returns.
6) "Show all cards" shows each card once. However, "show cards" will keep showing all the cards in the stack forever╤or until the mouse click, whichever comes first.
7) To clear a global variable, put empty into the variable.
8) If you were using 1.1 or 1.0.1 before you installed version 1.2, you may have kept your old Home stack. There are, however some nifty new handlers in the 1.2 Home stack script. You should add them to your home stack script. The new handlers do the following when typed into the message box:
"xy" puts the mouse location into the message box until the next mousedown.
"c" does a doMenu "Card Info..."
"b" does a doMenu "Bkgnd Info..."
"s" does a doMenu "Stack Info..."
Interestingly, if after typing "s" into the message box you press the Shift key when hitting the Enter key, you will get the script of the stack. This is the same as if you had chosen the menu item "Stack Info..." with the Shift key depressed.
9) To send a typed arrowKey in HyperTalk, use "arrowKey right", or "arrowKey left", etc.
10) From James Francis Redfern, HyperCard tester, comes a workaround for getting user Key Strokes: Show message window off-screen and have the user type into the message window. Then get what they typed.
11) You may already know that in the script editor, once you have done a "find", you can do a CMD-G to "Go" to the next occurrence of the found string. But an even neater way is to type CMD-H to find the next occurrence of the highlited string, without ever having done a find!
12) Sometimes, when you need to place a field or a button in the background, it╒s very difficult to tell where to place it since when you edit the background, the cards foreground information is not visible. A solution is to create the field or button on the card level in exactly the spot you would like it to appear, then select it and cut it. Then go into the Background and Paste it. It will be in exactly the right spot! Another workaround would be to just create it willy-nilly on the background, then go to the foreground (card level). You will then be able to manipulate your background buttons and fields from the foreground!
13) From Paul Foraker of HyperPro... If you want to paste into the message window, most people think that you first have to click in the empty message window with the mouse. Here╒s a shortcut which bypasses the mouse and keeps your fingers on the keyboard. Hit the Backspace (or Delete) key. This deletes any message you have in the message box. Even without a cursor in the message window, or any text in the message window, if you hit Backspace (or Delete) you will get a cursor in the empty message window. You can then paste without having to use the mouse to select the message window first.
14) To get to the end of a long script in a flash without scrolling, try CMD-A then right arrowKey!
15) You have to be careful when asking for the result. For instance, consider the following script:
find "findwhat"
put "test" into var
if the result is "not found" then answer "not found"
The above script won╒t answer "not found". The result has to be asked for on the next line of code:
find "findwhat"
if the result is "not found" then answer "not found"
put "test" into var
16) To test whether you have version 1.2.2, put the following handler in your stack script:
on openStack
if the long version < 01228000 then (do whatever)
--you have an older version of HyperCard
else (do whatever)
--you have at least version 1.2.2 or higher of HyperCard
end openStack
17) From Scott Bongiorno HyperCard tester╔ Here's a handler to display the current shipping version of HyperCard.
This handler gets and converts the value of the long version and displays it in the message box as the shipping version number.
Editors Note: Remember that the Box Characters are Option-Return
on theVers
put the long version into thisVers
put char 2 of thisVers & "." & char 3 of thisVers & "." &┬
It's been a while since the first Groupies script appeared in WINDOID, and a number of improvements have been made to it since then.
For those of you who are unfamiliar with Groupies, I'll take a moment to explain what it is. Before I was involved with computers, I was a graphic artist, and when I worked with compositions of type and graphic elements, I insisted on having them perfectly lined up with exactly the same amount of space between them. So, naturally, I expected to be able to equal-space and line up HyperCard objects as well.
"Groupies" is a HyperTalk tool that I created to manipulate groups of objects. It lets you specify any number of HyperCard buttons and / or fields as members of a group. Then, you may drag that group to a new location, align all the items in the group, put a fixed amount of space between them, or copy and paste the group into a new location.
"Groupies 3.2" is a stack containing this grouping tool in several formats. You may have seen the stack at HyperCard Users' Groups or on bulletin boards, and, if so, I recommend that you copy the entire stack. However, if you don't have access to the stack through other outlets, please copy its script (shown below). Putting this script into a stack or into your Home stack will give you a way to work with groups of objects by sending the Groupies messages.
The Groupies Messages
Group lets you select the members of the group. Note that making a new group overwrites the previous group, so you can only designate one group at a time.
Move lets you drag all the members of your group to a new location.
Copy lets you copy the group for future pasting. The group members are "remembered," so you can go to another card or another stack and paste them.
Paste lets you paste copies of the group into a new environment. Note that objects are pasted into the same layer that they came from but will not retain their same IDs.
For example, if you copy a group that contains bkgnd button IDs 5, 6 and 7, and then you paste them into the same background, the copies will have different, unique IDs, and you will have twice as many objects as before. The group, however, still consists of IDs 5, 6 and 7.
Erase will delete all the objects in the group. There is no way to undo this operation, so don't click OK unless you mean it.
Align lets you line up members of the group horizontally or vertically.
Adjust will put an equal amount of space between the members of the group. You will show it how much space you want.
if objectList is empty then Abort "There are no objects in the group."
end CheckGroup
function Choice prompt, choice1, choice2
answer prompt with choice1 or choice2 or "Cancel"
if it is "Cancel" then exit to HyperCard
return it
end Choice
on Confirm what
answer what with "Cancel" or "OK"
if it is "Cancel" then exit to HyperCard
end Confirm
on DrawMarker where
lock screen
doMenu "New Button"
put the number of card btns into newBtn
set icon of card btn newBtn to "Marker Cross"
set style of card btn newBtn to transparent
set showName of card btn newBtn to false
set rect of card btn newBtn to 0,0,20,20
set loc of card btn newBtn to where
set name of card btn newBtn to empty
choose browse tool
unlock screen
end DrawMarker
on EraseMarkers
lock screen
select card btn (the number of card btns)
doMenu "Clear Button"
select card btn (the number of card btns)
doMenu "Clear Button"
choose browse tool
unlock screen
end EraseMarkers
function HitTest where
repeat with i = the number of card buttons down to 1
if where is within rect of card button i then
if visible of card button i
then return "card button id " & the id of card button i
end if
end repeat
repeat with i = the number of card fields down to 1
if where is within rect of card field i then
if visible of card field i
then return "card field id " & the id of card field i
end if
end repeat
repeat with i = the number of bkgnd buttons down to 1
if where is within rect of bkgnd button i then
if visible of bkgnd button i
then return "bkgnd button id " & the id of bkgnd button i
end if
end repeat
repeat with i = the number of bkgnd fields down to 1
if where is within rect of bkgnd field i then
if visible of bkgnd field i
then return "bkgnd field id " & the id of bkgnd field i
end if
end repeat
return empty
end HitTest
on Prompt what
put what
put the seconds into startTime
put the mouseLoc into startLoc
wait until (the seconds = startTime+10) or (the mouseLoc <>┬ startLoc)
put empty into message box
hide message box
end Prompt
on SortGroup how
global objectList
put empty into sortedList
if how is "Vertically" then put true into verticalSort
else put false into verticalSort
repeat with i = 1 to the number of items in objectList
put false into inserted
if verticalSort then get top of item i of objectList
else get left of item i of objectList
repeat with j = 1 to the number of items in sortedList
if (verticalSort and (it < top of item j of sortedList)) or ┬
(not verticalSort and (it < left of item j of sortedList)) then
put item i of objectList & "," before item j of sortedList
put true into inserted
exit repeat
end if
end repeat
if inserted is false then put item i of objectList & "," after ┬
sortedList
end repeat
delete last char of sortedList
put sortedList into objectList
end SortGroup
on WithinRect selectRect
global objectList
repeat with i = the number of card buttons down to 1
if the loc of card button i is within selectRect then
if visible of card button i
then put "card button id " & the id of card button i ┬
& "," after objectList
end if
end repeat
repeat with i = the number of card fields down to 1
if the loc of card field i is within selectRect then
if visible of card field i
then put "card field id " & the id of card field i ┬
& "," after objectList
end if
end repeat
repeat with i = the number of bkgnd buttons down to 1
if the loc of bkgnd button i is within selectRect then
if visible of bkgnd button i
then put "bkgnd button id " & the id of bkgnd button i ┬
& "," after objectList
end if
end repeat
repeat with i = the number of bkgnd fields down to 1
if the loc of bkgnd field i is within selectRect then
if visible of bkgnd field i
then put "bkgnd field id " & the id of bkgnd field i ┬
& "," after objectList
end if
end repeat
end WithinRect
An Example of How You Might Use The Groupies Messages
Imagine that you've put the script into a stack that you're working with. And, on the first card of your stack you have 6 card buttons that you want to have lined up across the bottom of the card. So you would do the following:
Type "Group" into the message box. A confirmation dialog will prompt you to click on each of the objects that you want to be included in the group, and then to press the Command key. The dialog also has a cancel button so you can change your mind.
So click OK, and then click on each of the 6 buttons. Press Command and your group will be complete. (Note that it's difficult to click on objects if they are behind other objects. So for purposes of grouping, you might separate any overlapping ones. Then, after they're grouped, you can move them back to their original positions.)
Now invoke the "Align" message by typing it into the message box. A dialog will ask you whether you want to move the group members left and right or up and down. In order to align the buttons horizontally, you will want to click on "Up/Down". Then answer the next dialog that appears with "Bottom" to align their bottom edges. The next prompt will ask you to click to show an alignment guide. Click anywhere along the horizontal line where you want them positioned.
Then the "Align" handler will move the objects for you. In general, the Groupies handlers prompt you each step of the way through the procedure you've chosen to execute. I think it's still a good idea to test drive the handlers by making a practice stack with a lot of buttons and fields, and try out the various Groupies messages. Thanks, and happy grouping!
A message from Phil Russell of Waldport, Oregon, inspired me to write yet another Novice Corner. He writes, "WINDOID is great! Please give lots of 'rest of us' hints! I wouldn't know a global variable from a dead fish!"
Well, global variables are indeed too sticky a subject for the "rest of us" novices. So let's have some real fun painting with HyperCard!
To use the "paint" tools, we need to be sure that we're at a high enough user level to have access to those tools on our menubar. If that sounds confusing, bear with me. The fun will be worth the slight hassle. What we have to do to prepare is:
1) Be on the Home card. If you aren't, and are in another stack, choose "Home" from the "Go" Menu at the top of your screen. Otherwise, when you click on HyperCard in the Finder you will always be taken directly to the Home card. If your menubar is not visible, press both the Command key and the Spacebar to show it.
2) Click on the left arrow button at the bottom of your Home card to go to the User Preferences card. Here you can set your "userLevel".
3) Click on a user level of either Painting, Authoring, or Scripting.
4) Click on the right arrow at the bottom of your User Preferences card, and you should be back on your Home card.
5) From the Edit menu on top of your screen, choose "New Card".
OK. We now have a blank white card to paint on. Let's have some HyperCard paint fun.
6) Hold down the Option key while pressing the Tab key. This will put the tools palette in the middle of your card.
7) Click on the Rectangle tool, which is in the middle column right next to the Spray Can tool and below the Erasure tool.
8) From the Options menu on top of your screen, choose "Draw Multiple". Look at the Options menu again to be sure that the "Draw Multiple" choice is now checked with a checkmark.
Here comes the fun part. Click the mouse on a white portion of your blank card and hold the mouse button down. Move the mouse around. This is called dragging the mouse. You will get some nice effects. Try it with the Grid option checked both on and off.
You can erase what you draw by either double-clicking on the Erasure tool to erase everything you have drawn, or erase only the last thing you drew by pressing the Tilde key, located above the Tab key. A single click on the Erasure tool allows you use this tool to selectively erase parts of your painting.
For different effects, choose "Draw Centered" from the Options menu. Once again, click the mouse, hold the mouse button down, and move the mouse around. Try choosing the Oval tool from the tool palette and doing the same things we did with the Rectangle tool. The Oval tool is right below the Rectangle tool. The Shift key constrains the tools to perfect squares and circles.
You will find that the faster you move the mouse the greater distance the lines will be apart. With a little practice you can draw amazing graphic elements for your stacks in just a few seconds.
Some users have asked for scripts that allow fields to work like spreadsheets. We looked at some of the new 1.2 features and would like to share these with you. Tab, Return, and Arrow keys will move the selection up, down, and from field to field much like a spreadsheet. We hope you enjoy them and have a very Merry Christmas.
To begin: Create some non-scrolling fields and put the following into your card script:
on tabKey
get the selectedLine
if it is empty then put "line 1 of bkgnd field 0" into it
add 1 to word 6 of it
if word 6 of it > 3 then
put 1 into word 6 of it
add 1 to word 2 of it
end if
select it
end tabKey
on returnInField
get the selectedLine
if word 2 of it < 10 then add 1 to word 2 of it
put 1 into word 6 of it
select it
end returnInField
on arrowKey direction
if the commandKey is down or the optionKey is down┬
When you set up your four fields, make sure that Auto Tab is selected in Field Info. These techniques make data entry much more accurate and faster. You must have version 1.2 or newer to use these scripts:
--Age field:Check for integer in the range 1 to 99.
Many people send us their forms from the back of WINDOID and ask me what is the "best" way to do something in HyperCard. Sorry, there really isn't one "best" way. HyperCard was designed to build on your ingenuity and individual strengths. Fortunately, there are some good basic techniques. After all, once the basics are mastered, the rest of the time can be spent on stack design, creativity, and functionality.
The one thing I dislike in a stack is a script that changes my Home stack User Preferences and doesn't set them back. When a person designs a stack and alters the user's pre-set preferences, they need to make certain to set them back. Yes, it could mean a few extra lines of HyperTalk, but it also means much happier users.
When the Home stack is opened from the Finder, the handler getHomeInfo (residing in the stack script of the Home stack) is called from the on startUp handler. When a stack other than the Home stack is opened from the Finder, it may or may not allow the getHomeInfo handler to be called (depending upon the handlers it traps and/or passes), thus limiting or nullifying the users' preferences. I find this script helpful in this situation:
on openStack
global stacks
if stacks is empty then getHomeInfo
--your code
--goes here
pass openStack
end openStack
HyperCard uses the global variable "stacks" to keep a directory of all the places your stacks are located. This "directory" is also in a field on the "Stacks" card in your Home stack. The handler getHomeInfo stores this information. Thus, if the global "stacks" is empty, then either getHomeInfo has not been called yet, or the field on the card "Stacks" in the Home stack is empty. Either way, by calling getHomeInfo if the global "stacks" is empty, you are getting all the user's preferences before you begin. You can then take advantage of those settings later in your script.
Other general script-tips are the following which Swami (a really dedicated and appreciated AHUG member) showed me:
on enterKey
global myLastMsg
if the optionKey is down then
put myLastMsg
exit enterKey
else
put the msg into myLastMsg
end if
pass enterKey
end enterKey
on returnKey
global myLastMsg
if the optionKey is down then
put myLastMsg
exit returnKey
else
put the msg into myLastMsg
end if
pass returnKey
end returnKey
These scripts can reside in your Home stack script to be available in all of your HyperCard stacks. They allow for a "recall" of a function (a function is used in HyperTalk to get information such as the current date or time or to compute a value within a script) you may have called. If you type something like "put the number of chars of fld 1" and press the Return or Enter key, you will get a response back in the message box such as "3521". Well, suppose you wanted to see the number of characters of field 2? Instead of retyping "put the number of chars of fld 2", just hold down the Option key and type the Return key or Enter key again. Voila! You can now backspace once, type in "2", and type Return to get the number of characters in field 2. Instead of retyping 32 keystrokes, you've only typed 4. Quite a savings!
As a Mac II user, I got tired of the menu bar disappearing as I browsed through other people's stacks, and decided to prevent it with this simple handler:
on hide what
if what = "menubar" then
-- don't hide the menubar
else pass hide
end hide
Put that script in your Home stack script and your menu bar will stick around.
The "hide" that you get, by the way, is not a HyperTalk command, but is rather a system message. It's sent to the current card. The fact that it is a system message means that whether you type "hide menubar" into the message box, or use Command-SpaceBar, the "hide" message gets sent to the current card.
Similarly, you can keep your message box, tool window, and pattern window visible. Try this:
on hide what
if what = 3 then
-- don't hide the tool window
else pass hide
end hide
Now make your tool windoid visible and type "hide tool window" into the message box. It doesn't hide. But if you click in the tool window's close box, It'll go away. That's because the "hide" that gets sent in the message box is a HyperTalk command, and the "hide" a close box executes (hope that makes sense) is a system message. When "hide is sent as a system message, the only value the parameter variable "what" can have is "menubar".
If the tool window is identified by a "3" what about the other windows.
1 = card window
2 = pattern window
3 = tool window
4 = message box
So to keep your message box showing, put this handler in your Home stack.
on hide what
if what = 4 then
-- keep my message box visible
else pass hide
end hide
Sometimes a good designer will hide everything except the card window in order to give you the maximum benefit of the graphic animation or slide show that is to follow. A polite designer, however, will have the script remember whether those objects were visible, and then re-show them at the end of the animation. A simple script for that might be:
on openCard
put the visible of the msg into visiMsg
put the visible of tool window into visiTool -- not "the" tool --window
HyperCard version 1.2.2 is a maintenance release with a number of bug fixes, better support for foreign languages and a few small enhancements.
These notes contain information of interest to stack designers and programmers that are not covered in the general HyperCard Version 1.2.2 Release Notes stack. The HyperCard version 1.2.2 Programmer's Notes include the following:
Ñ Script Examples and detailed explanations of enhancements.
Ñ Explanations of bug fixes.
Briefly, HyperCard 1.2.2 includes the following:
Ñ Improved support for display and printing of Japanese, Arabic and other non-Roman languages.
Ñ Improvements in handling sound (in conjunction with Sound Manager fixes in System 6.0.2).
Ñ Overall improved robustness in low-memory situations.
Ñ Parameters returned by HyperCard's Find command have been enriched and are more accurate.
Ñ A variety of bug fixes.
NOTE: Developers who plan to license and ship HyperCard with their products outside the United States should use version z1.2.2, which contains a special resource for handling non-U.S. date, currency and other number formats. Contact Apple Software Licensing for details on distributing HyperCard with third-party products.
Enhancements:
Ñ Pasting fields with the Shift key down
If the Shift key is pressed while pasting a field, HyperCard 1.2.2 will paste the field AND put the text of the copied or cut field into it.
Whether pasting a field into a card or background, text for the current card will be put into the pasted field. Copying and pasting a field with the Shift key can be done in a HyperTalk handler as follows:
on mouseUp
select cd fld 1
doMenu "Copy Field"
go next card
type "V" with commandKey,shiftKey --paste it with the
--shiftKey down
choose browse tool
end mouseUp
NOTE: The doMenu command cannot be used to Shift-Paste a field as it takes only one argument.
Ñ Placing a Paint graphic while drawing
HyperCard 1.2.2 allows rectangles, ovals, and regular polygons to be placed (by sliding them around the screen) while they are being created.
With the rectangle, round rectangle, oval, or regular polygon tool chosen the user drags the mouse to stretch out the shape. Without releasing the mouse button, pressing the Command key will stop stretching and allow sliding the graphic. Releasing the Command key resumes stretching.
This capability is only available while the user is working with the painting tools, keyboard and mouse directly; it cannot be programmed in a HyperTalk handler.
Ñ Faster navigation
Going to the previous card for a specified background is faster. For example:
on mouseUp
go to prev card of bkgnd "Foo"
end mouseUp
Support for Foreign Languages:
Ñ Right justified and right-to-left text
HyperCard 1.2.2 correctly frames (draws the box around) text found by HyperCard's Find commands when text is left, center or right justified, and when operating in languages which read right-to-left.
Reset Paint will use right justification for Paint text if right-to-left text has been set by the Script Manager. This restores the defaults to what would be expected on a Kanji, Arabic or Hebrew language system.
Ñ Printing
HyperCard 1.2.2 will print Kanji characters in high-quality mode on the ImageWriter II and ImageWriter LQ printers.
HyperCard 1.2.2 uses the default font set by the Script Manager for printing reports.
Bug Fixes:
Ñ Behavior in low-memory conditions
HyperCard 1.2.2 has a fix for the operating system Scrap Manager to help it when memory is running low. When cutting or copying a HyperCard object or graphic under low memory conditions (i.e., as would be created by repeated copying and pasting on a 1 MB system), HyperCard could sometimes receive a corrupted copy of the object when it was pasted by a user or HyperTalk handler. This bad copy could cause the system to hang or corrupt the HyperCard stack being used. This fix, along with several smaller ones, make HyperCard 1.2.2 much more robust when running on a 1 MB Macintosh, or in a small partition under MultiFinder.
Ñ Appending Scripts
Sometimes when memory was running low the beginning of a stack script was lost when another handler attempted to append something to the end of the script. This has been fixed.
Ñ Sound on 1 Megabyte systems, Mac Plus and SE
System 6.0.2 fixed a number of small problems with recent releases of the Macintosh Sound Manager. HyperCard 1.2.2 has a fix for gaining and releasing the sound channel which supports desk accessories, modal dialogs or other software that uses sounds. This eliminated known sound problems including system hangs and occasional clicks and pops on the Macintosh Plus and SE, and provides better handling of synthesized and digitized sounds in general.
Ñ The "Find" command
Getting parameters for a Find command is now fully implemented, so HyperCard 1.2.2 returns more information when asked for ╥the params╙. These improvements allow stack designers to intercept a Find command, examine it in detail, then modify, terminate, execute or override it inside a handler.
HyperCard 1.2.2 returns the string to be found with quotes (which can be important for conditional HyperTalk statements to multi-word searches), and also returns a complete field expression, instead of just "<field>".
For example, if the command:
find whole "My Name" in bkgnd fld "Foo"
were intercepted by the handler:
on Find
send the params to HyperCard
if the result is empty then exit find
lock screen
push card
go to stack "server:Address"
send the params to HyperCard --search in this stack too
if the result is empty then exit find
pop card -- return to original stack
end Find
Inquiring about "the params" would return the following literal results:
find whole My Name in <field> -- for version 1.2.1 and 1.2
find whole "My Name" in bkgnd field 2 -- for version 1.2.2
NOTE: If the Find command contains a field name (e.g., bkgnd fld "Foo"), HyperCard converts the name into the field number (e.g., bkgnd field 2).
A simpler command like:
find "My Name"
would return:
find 0 My Name -- for version 1.2.1 and earlier
find normal "My Name" -- for version 1.2.2
NOTE: In simple Find commands, version 1.2.2 returns "normal" in the second item (instead of "0"), indicating the Find command was not followed by modifiers like "whole" or "string".
Ñ Closing open fields at the start of a Find command
HyperCard now closes the currently open field (one where there is a flashing cursor) when a search is initiated via the Find command. This should eliminate situations where Find would return an invalid result.
Ñ Sending the Choose message
In earlier versions, when the user clicked on a tool in the tool windoid, HyperCard did not send the Choose message. Now it does. This is useful when a designer wants to figure out which tool the user has chosen from the palette. For example:
on choose what,whichTool
if what is "tool" and whichTool is "7" then beep
-- beep when the brush tool is chosen
pass choose -- do it
end choose
NOTE: The Choose message passes the word "tool" and a number, not a tool name.
Ñ Scrolling fields
The scrollbar is now updated after cutting or deleting text from a scrolling field, so the field can now be scrolled back to the top with the mouse after cutting or deleting text from the bottom.
Text Arrows now update the scrollbar and scroll setting properly. Previous versions did not update the scrollbar when text arrows were used to scroll up and down the field.
Ñ Painting tools with hidden pictures
If the picture is hidden you can no longer get "marching ants╙ by double-clicking the selection tool.
If the picture is hidden you can no longer set an insertion point by choosing the text tool and clicking the mouse.
Ñ Typing in locked stacks
A bug in HyperCard 1.2.1 allowed users to type carriage returns into fields in a locked stack, even though the userModify property was set to false. This has been fixed.
Ñ Working with custom FOND resources
A bug allowed a custom FOND attached to a stack to be purged, but a Font Manager global still referred to it. This could corrupt HyperCard's heap; it has been fixed.
Ñ Font substitution with the ImageWriter LQ
If the 3x fonts for the ImageWriter LQ are available, HyperCard will now use them.
Ñ Going to other stacks while deleting a card
Earlier versions of HyperCard would result in an Unexpected Error #1250 or 1260 if a user (via a script) left the stack in a delete or openCard handler. This has been fixed.
Ñ Copying the selection
Earlier versions of HyperCard accidentally copied the entire text of a source container when a handler requested that the selection (highlighted text) be put after the contents of a destination container. Version 1.2.2 fixes this.
Ñ the diskSpace
The diskSpace property now returns the correct available diskspace when it's more than 32 MB.
Ñ Visual effects on "E-Machines" type large monitors
Visual effects now work with monitors which change low-memory screen globals.
Ñ Flush mouseUp event before sending the mouseUp message
When a button was clicked on and the message was sent prior to the event being removed from the queue, XCMDs were getting confused by the extra event. This is fixed.
Ñ Suspend/Resume
In some sublaunch situations where the user had to find the application with Standard File, a bug resulted in weird looking screens on return to HyperCard. This has been fixed.
We hope you have enjoyed reading this latest issue of WINDOID and have found it to be interesting and informative. Please remember that the purpose of this newsletter is to help you help us to make a quality difference in the world. We provide a unique opportunity for WINDOID readers to contribute to the ongoing growth and excellence of Apple's HyperCard¬ and would like to make a request for a little of your time.
There is a form at the back of this, and every, issue of WINDOID that allows you to communicate directly with the HyperCard Team. Bill, Dan, and the entire team really want to know what you would like to see in HyperCard and are more than willing to give you what you want. What we need to make this happen is your input. We want to know what you like, and what you don't like, about HyperCard and what features or suggestions you would like to see implemented in future versions. If you have a problem we can address it in WINDOID or perhaps the next revision of HyperCard. You can make a difference in the world by communicating with us. Don╒t pass up the opportunity!
For those that wrote to us and participated in HyperCard 1.2.1 and 1.2.2, we thank you. I believe that you will be very pleased you took the time to make yourself heard.
For those of you that would like additional copies of this WINDOID, or back issues, you must send us a stamped-self-addressed-envelope for each one. We will be unable to send you anything without them. If you send us a very large manilla envelope for all of the issues, please put on enough postage for about sixty (60) pages.
Bryan has put together a mailing list and will be telling you how to receive regular copies as I publish them. Again, if you like HyperCard and WINDOID, please let us know. Individuals make a difference!
If you would like information about AHUG, write to:
If you have a bug, suggestion, comment, or just want to know the best way to do something in HyperCard, you can fill out the form below and send it to: